package com.thinkerwu.learn.core.utils;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

/**
 * @author Thinker Wu
 * @date 2018年11月05日-14时30分
 */
public class DateUtil {


    /**
     * 获取两个月份之间所有的年月 按照yyyy-MM格式返回
     *
     * @param minDate
     * @param maxDate
     * @return
     * @throws ParseException
     */
    public static List<String> getMonthBetween(String minDate, String maxDate) throws ParseException {
        List<String> result = new ArrayList<>();
        //格式化为年月
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");

        Calendar min = Calendar.getInstance();
        Calendar max = Calendar.getInstance();

        min.setTime(sdf.parse(minDate));
        min.set(min.get(Calendar.YEAR), min.get(Calendar.MONTH), 1);

        max.setTime(sdf.parse(maxDate));
        max.set(max.get(Calendar.YEAR), max.get(Calendar.MONTH), 2);

        Calendar curr = min;
        while (curr.before(max)) {
            result.add(sdf.format(curr.getTime()));
            curr.add(Calendar.MONTH, 1);
        }

        return result;
    }

    /**
     * 指定格式，格式化日期
     *
     * @param date
     * @param pattern
     * @return
     */
    public static String format(Date date, String pattern) {

        SimpleDateFormat sdf = new SimpleDateFormat(pattern);
        return sdf.format(date);
    }

    /**
     * 指定格式，格式化日期
     *
     * @param date
     * @param pattern
     * @return
     */
    public static Date parse(String date, String pattern) throws ParseException {

        SimpleDateFormat sdf = new SimpleDateFormat(pattern);
        return sdf.parse(date);
    }

    /**
     * 获取某一天的0：00时间
     *
     * @param amount 假如该值为0，则获取当天0：00，为1获取明天0：00，-1获取昨天0：00,以此类推。
     * @return
     */
    public static Date getZeroTime(int amount) {
        Calendar calendar = Calendar.getInstance();
        calendar.add(Calendar.DATE, amount);
        calendar.set(Calendar.AM_PM, 0);
        calendar.set(Calendar.HOUR, 0);
        calendar.set(Calendar.MINUTE, 0);
        calendar.set(Calendar.SECOND, 0);

        return calendar.getTime();
    }

    /**
     * 获取明天0:00的秒数
     *
     * @return
     */
    public static Long getSecondsNextEarlyMorning() {
        Date tomorrow = getZeroTime(1);
        return tomorrow.getTime() / 1000;
    }

    /**
     * 获取一个默认初始时间，在此项目中该时间暂定为：
     *
     * @return
     */
    public static Date getInitTime() {
        Date date = new Date(0);
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        try {
            date = simpleDateFormat.parse("2001-01-01 01:01:01");
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return date;
    }


}
